#!/usr/bin/perl
use strict;

if (scalar @ARGV==0) {
    die "Usage: 此脚本用于根据序列ID列表从总fasta文件中提取目的序列，总fasta文件碱基序列一行或多行无影响
        perl $0 <ID list> <fasta sequence> <输出文件>\n";
}

#读取要提取的基因名称并储存在哈希中
my %hash=();
open IN,"$ARGV[0]";
open OUT, ">","$ARGV[2]" or die "output_file not exists!\n";
while (<IN>) {
    chomp;
    $hash{$_}=1;
}
close IN;

#按照>读取fasta文件
open FA,"<$ARGV[1]";
$/=">";<FA>;
while (<FA>) {
    chomp;
#split分割ID和序列形成一个数组返回，只将序列ID储存到数组，并没有对当前循环进行实际分割
    my $id=(split /\n/,$_,2)[0];
    if (exists $hash{$id}) {
#打印当前循环的序列
        my $output = ">$_";
        print OUT $output;
    } else {
        next;
    }
}
close FA;